#include <iostream>
#include <cmath>
using namespace std;

const int N = 25;
int nums[N];
int ret;
int n, k;

bool isprime(int x) {
    if (x < 2) return false;
    for (int i = 2; i * i <= x; i++) { // 优化质数判断
        if (x % i == 0) return false;
    }
    return true;
}

void dfs(int m, int sum, int size) {
    // 如果组合的大小已经达到 k
    if (size == k) {
        if (isprime(sum)) {  // 如果该组合的和是质数
            ret++;
        }
        return;
    }
    
    // 遍历剩余数字进行选择和不选择
    for (int i = m; i <= n; i++) {
        // 选择当前数字
        dfs(i + 1, sum + nums[i], size + 1);
    }
}

int main() {
    cin >> n >> k;  // 输入数字的个数和需要选择的数字个数
    for (int i = 1; i <= n; i++) {
        cin >> nums[i];  // 输入每个数字
    }

    // 初始从第一个数字开始递归，和为0，选择的数量为0
    dfs(1, 0, 0);

    // 输出最终符合条件的组合数量
    cout << ret << endl;
    return 0;
}
